package cn.huiyunche.base.service.interfaces;

import cn.huiyunche.base.service.enums.BFeeTypeEnum;
import cn.huiyunche.base.service.model.*;

import java.math.BigDecimal;
import java.util.List;

public interface BFeeTypeService {

    /**
     * @param feeType   费用类型
     * @param valuation 估值
     * @Title: getSInsuranceFeesByFeeCode
     * @Description: 根据运输费编码查询保险费
     * @return: SInsuranceFee 保险费金额
     */
    SInsuranceFee getSInsuranceFeesByFeeCode(BFeeType feeType, BigDecimal valuation);

    /**
     * @param feeModelId 价格模型id
     * @param feeCodes   费用编码
     * @Title: getByCode
     * @Description: 根据编码查询费用类型
     * @return: List<BFeeType>
     */
    List<BFeeType> getByCode(Long feeModelId, List<Integer> feeCodes);

    /**
     * @param extract 提车费编码
     * @Title: getExtractFeeByFeeCode
     * @Description: 根据提车费编码查询提车费
     * @return: SExtractFee
     */
    SExtractFee getExtractFeeByFeeCode(BFeeTypeEnum extract);

    /**
     * @param delivery 交车费编码
     * @Title: getDeliveryFeeByFeeCode
     * @Description: 根据交车费编码查询提车费
     * @return: SDeliveryFee
     */
    SDeliveryFee getDeliveryFeeByFeeCode(BFeeTypeEnum delivery);

    /**
     * @param shipping 运输费编码
     * @param distance 运距
     * @Title: getShippingFeeByFeeCode
     * @Description: 根据运输费编码查询运输费费率
     * @return: SShippingFee
     */
    SShippingFee getShippingFeeByFeeCode(BFeeTypeEnum shipping, BigDecimal distance);

    /**
     * @param feeModelId 费用模型id
     * @Title: getListByFeeModelId
     * @Description: 根据费用模型id获取所有费用类型
     * @return: List<BFeeType>
     */
    List<BFeeType> getListByFeeModelId(long feeModelId);

    /**
     * 查询费用类型
     *
     * @param example
     * @return BFeeType
     */
    BFeeType selectByExample(BFeeTypeExample example);

    /**
     * @param feeTypeId 费用类型主键
     * @Title: getSIvoiceRateByFeeCode
     * @Description: 各模块费用模型获取发票费费率
     * @return: SInvoiceRate
     */
    SInvoiceRate getSIvoiceRateByFeeCode(Long feeTypeId);
}
